<?php

/**
 * Access_ControlObject - Classe de gestion de session utilisateur
 *
 * @package
 * @author Alexis Eric
 * @copyright Copyright (c) 2012 - Erra Prod
 * @version $1.0$
 * @access public
 */
class Access_ControlObject extends Erra_Fields_Base_Object {

    /**
     * get() - Récupere la valeur d'une proprieté à partir de sa clé
     * 
     * @param type $key
     * @return type
     */
    public static function get($key) {
        return (Erra_Persistance_Session::get('login_infos') != null) ? Erra_Persistance_Session::get('login_infos')->$key : null;
    }

    /**
     * get_user_id() - Renvoie directement l'id (access_accessobject.id) de l'utilisateur
     * 
     * @return type
     */
    public static function get_user_id() {
        return (Erra_Persistance_Session::get('login_infos') != null) ? Erra_Persistance_Session::get('login_infos')->id : null;
    }

    /**
     * is_logged() - Retourne true si l'utilisateur est loggé
     * 
     * @return type
     */
    public static function is_logged() {
        return (Erra_Persistance_Session::get('login_infos') != null) ? true : false;
    }

    /**
     * isSuperAdmin() - Retourne true si l'utilisateur est un admin
     * 
     * @return type
     */
    public static function isSuperAdmin() {
        return (Erra_Persistance_Session::get('login_infos') != null && Erra_Persistance_Session::get('login_infos')->is_admin >= 2) ? true : false;
    }

    /**
     * getAdminLevel() - Retourne le niveau admin de l'utilisateur
     * 
     * @param type $id
     * @return int
     */
    public static function getAdminLevel($id) {
        $is_admin = Erra_Core_DatabasePdo::SELECT('SELECT is_admin FROM access_accessobject WHERE id="' . $id . '"');
        if (Erra_Core_DatabasePdo::rowCount()) {
            $is_admin = $is_admin->fetch();
            return $is_admin->is_admin;
        }
        return 0;
    }

    /**
     * watch() - Listener d'accès, effectue les bonnes redirection en fonction de la situation
     */
    public static function watch() {
        // On autorise seulement un superadmin à s'enregistrer
        if (Erra_System_PageBuilder::getCurrentPageName(0) == 'register-admin') {
            $countAccesses = Erra_Core_DatabasePdo::SELECT('SELECT COUNT(id) as num_accesses FROM access_accessobject');
            $result = $countAccesses->fetch();
            if ($result->num_accesses > 0) {
                Erra_System_PageBuilder::redirect('login');
            }
        }
        
        // On redirige l'utilisateur vers l'inscription super-admin si on ne trouve pas d'utilisateurs
        if (Erra_System_PageBuilder::getCurrentPageName(0) == 'login') {
            $countAccesses = Erra_Core_DatabasePdo::SELECT('SELECT COUNT(id) as num_accesses FROM access_accessobject');
            if (!Erra_Core_DatabasePdo::rowCount()) {
                Erra_System_PageBuilder::redirect('register-admin');
            } else {
                $result = $countAccesses->fetch();
                if ($result->num_accesses == 0) {
                    Erra_System_PageBuilder::redirect('register-admin');
                }
            }
        }

        // Si l'utilisateur n'est pas connecté (et qu'il n'est pas déja sur une page d'inscription), on le regidirge vers la page login
        if (Erra_Persistance_Session::get('login_infos') == null
                && Erra_System_PageBuilder::getCurrentPageName(0) != 'login'
                && Erra_System_PageBuilder::getCurrentPageName(0) != 'register-admin') {
            Erra_System_PageBuilder::redirect('login');
        }
    }

}

?>